package com.asialjim.wechat.official.menu;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * <h2><em>ASIAL JIM JAVA DOC</em></h2><hr/>
 * <h3>CLASS DESCRIPTION</h3>
 * <p> The Menu Button for WE CHAT Official Account <a href="https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html">OFFICIAL DOCUMENT</a</p>
 * <p> 微信菜单按钮 <a href="https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html">微信官方文档传送门</a>
 * <p> Copyright &copy; ztzh inc Ztzh Co., LTD<hr/>
 * @author Asial Jim &nbsp;&nbsp;<span>Email: zengyz0128@zsmarter.com &nbsp;&nbsp; asialjim@hotmail.com</span>
 * @since 2020/6/10 11:05 &nbsp; JDK 1.8
 * @version 1.0.0
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper=false)
public class WeChatMenuButton implements Serializable {
	private static final long serialVersionUID = 4530218274889636300L;

	/**
     * <b>菜单的响应动作类型.</b>
     * <ul>
     *     <li>view<pre>表示网页类型</pre></li>
     *     <li>click<pre>表示点击类型</pre></li>
     *     <li>miniprogram<pre>表示小程序类型</pre></li>
     *     <li>scancode_push<pre>表示用户点击后调起微信客户端扫码工具，如果扫描结果为url则跳转到url</pre></li>
     *     <li>scancode_waitmsg<pre>表示扫码后弹起消息接受中提示框，并向开发者下发用户扫码事件</pre></li>
     *     <li>pic_sysphoto<pre>表示系统调用相机拍摄图片，并向开发者服务器发送图片消息</pre></li>
     *     <li>pic_photo_or_album<pre>表示用户拍照或者从系统选择照片发送到开发者服务器</pre></li>
     *     <li>pic_weixin<pre>调起微信相册，并选择图片发送到开发者服务器</pre></li>
     *     <li>location_select<pre>上报地理位置，用户选择地理位置发送，并推送到开发者服务器</pre></li>
     *     <li>media_id<pre>下发消息给用户，media_id鄙俗是开发者填写的永久素材id</pre></li>
     *     <li>view_limited<pre>跳转图文消息</pre></li>
     * </ul>
     */
    private WeChatMenuButtonType type;
    public void setType(String type){this.type = WeChatMenuButtonType.nameOf(type); }
    public String getType(){ return Objects.nonNull(this.type) ? this.type.getName() : ""; }

    /**
     * 菜单标题，不超过16个字节，子菜单不超过60个字节.
     */
    private String name;

    /**
     * <p>菜单KEY值，用于消息接口推送，不超过128字节.
     * <p>click等点击类型必须
     */
    private String key;

    /**
     * <p>网页链接.
     * <p>用户点击菜单可打开链接，不超过1024字节。<p>type为miniprogram时，不支持小程序的老版本客户端将打开本url。
     * <p>view、miniprogram类型必须
     */
    private String url;

    /**
     * <p>调用新增永久素材接口返回的合法media_id.
     * <p>media_id类型和view_limited类型必须
     */
    @JsonProperty("media_id")
    private String mediaId;

    /**
     * <p>小程序的appid.
     * <p>miniprogram类型必须
     */
    @JsonProperty("appid")
    private String appId;

    /**
     * <p>小程序的页面路径.
     * <p>miniprogram类型必须
     */
    @JsonProperty("pagepath")
    private String pagePath;

    /**
     * 查询官方菜单所需字段
     */
    private String value;

    /**
     * 图文消息
     */
    @JsonProperty("news_info")
    private WeChatMenuNewsInfo newsInfo;

    /**
     * 适用于微信公众号二级菜单
     */
    @JsonProperty("sub_button")
    private List<WeChatMenuButton> subButtons = new ArrayList<>();
}
